So in diesem Abschnitt will ich jetzt kurz darstellen, was dann tatsächlich passiert,
wenn man so ein fertig übersetztes Programm startet und dazu zuerst mal den Unterschied
zwischen einem Programm und einem Prozess einführen. Ein Programm ist eine Folge von
Anweisungen, die beispielsweise als ausführbare Datei auf dem Hintergrundspeicher hinterlegt ist.
So eine executable. Ein Programm ist natürlich auch ein C-Programm im Quellcode. Also es gibt
verschiedene Darstellungen von einem Programm in verschiedenen Sprachen kann man sagen. In C,
natürlich auch in Java oder eben auch in Intel Maschinencode. Letztendlich ja auch eine Sprache,
natürlich keine die für Menschen jetzt besonders gut verarbeitbar ist, aber für einen Prozess
und natürlich umso mehr. Also ein Programm ist einfach eine Folge von Anweisungen,
die irgendwo abgelegt ist. Ein Prozess ist ein Programm, das sich in Ausführung befindet,
zusammen mit seinen Daten. Und dabei muss man beachten, dass sich das gleiche Programm
durchaus mehrfach in Ausführung befinden kann. Also man kann sich das auch ganz leicht vorstellen.
Auf einem Rechner sind mehrere Benutzer angemeldet, eingeloggt und jeder solche
Benutzer hat gerade einen Edge-Short, zum Beispiel den VI oder den Vim, gestartet und gibt ein C-Quell-Programm ein.
Dieses Programm Vim ist ja auch ein ganz normales Programm und wenn zwei Benutzer diesen Vim starten,
dann läuft dieser Vim eben zweimal. Es ist das gleiche Programm, aber einmal für den einen
Benutzer, einmal für den anderen Benutzer. Das heißt, dieses Programm Vim hat in diesen
beiden Ausführungen natürlich unterschiedliche Daten. Ja und so was nennt man dann eben ein Prozess,
ein Programm in Ausführung. Ein Prozess ist erstmal ein abstraktes Gebilde. Das sind also
letztendlich die Funktionen und Datenstrukturen, die man braucht, um eine Programmausführung zu
verwalten. Und wenn Sie das im objektorientierten Sinn betrachten, dann ist ein Prozess eine Klasse.
Und ein konkreter Prozess, also das Programm Vim, das Sie als Benutzer gestartet haben und mit dem
Sie jetzt eine Datei Hallo.c editieren, das ist eine Prozessinstanz dann. Sie können ja auch als
ein Benutzer in verschiedenen Fenstern mehrfach den Editor wie Aish oder Vim starten und verschiedene
Dateien damit editieren. Und jede Vim-Instanz ist dann ein eigener Prozess oder eine eigene
Prozessinstanz. Manchmal findet man auch den Begriff Prozessinkarnation. Ich finde Prozessinstanz
eigentlich schöner, gerade auch im Vergleich zur objektorientierten Sicht, wo ich sage,
Prozess ist erstmal die Klasse. Der beschreibt, wie man einen Programmablauf verwaltet. Und die
Prozessinstanz ist dann eben das konkrete Gebilde. Das ist also eine konkrete Ausführungsumgebung für
ein Programm. Damit verbunden ist Speicher, damit verbunden sind Rechte, Zugriffsrechte und
Verwaltungsinformationen. Also wie lange rechnet zum Beispiel dieses Programm schon. Und das ist
dann eben auch im objektorientierten Sinn eine Instanz. In der Praxis ist der Sprachgebrauch
häufig sehr schlampig und wenn von Prozessen gesprochen wird, dann werden meistens Prozessinstanzen
gemeint, weil man sich so als Normalnutzer eigentlich über dieses abstrakte Gebilde und
wie ein Prozess verwaltet wird im Betriebssystem ja überhaupt keine Gedanken macht, sondern man
interessiert sich eigentlich nur für die Prozesse, die man halt selber gestartet hat. Und das sind
dann eben die Instanzen. Schauen wir uns erstmal die Speicherorganisation eines Programms an,
so wie der Compiler oder der Linker das am Ende erzeugt. Definiert ist diese Speicherorganisation
durch das L-Format und ich habe das jetzt hier mal sehr einfach dargestellt. Das ganze beginnt,
in diesem Fall jetzt hier unten mit dem Header. In diesem Header sind Identifikatoren drin,
bisschen Verwaltungsinformation. Da steht unter Umständen auch drin, welchen Maschinencode diese
Datei enthält. Es gibt zum Teil auch, dass in einer solcher ausführbaren Datei Maschinencode für
unterschiedliche Prozessoren liegt. Also Apple hat das vor etlichen Jahren mal gemacht, als sie
vom PowerPC Prozessor auf den Intel Prozessor umgestiegen sind. Da haben sie eine Zeit lang in
ihren Executables im Endeffekt sowohl für PowerPC als auch für Intel den Code vorgehalten,
sodass man also das gleiche ausführbare Programm auf beiden Architekturen laufen lassen konnte. Und
solche Informationen steht dann in diesem Header drin. Danach kommt der Textbereich, das ist der
Programmcode. Also Textsegment und Code Segment sind eigentlich Synonyme. Das ist also der
eigentliche Programmcode, der eben aus dem C-Quellcode, den sie programmiert haben,
übersetzt wurde. Dann kommt ein Bereich Initialized Data, der beschreibt die initialisierten
Presenters
Zugänglich über
Offener Zugang
Dauer
00:17:17 Min
Aufnahmedatum
2020-05-25
Hochgeladen am
2020-05-25 09:46:25
Sprache
de-DE